package guigu.IoSystem;

import org.junit.Test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class Exercise {
    /*
    对非文本文件图片的加密
     */
    @Test
    public void test1()
    {
        FileInputStream fis = null;
        FileOutputStream fos = null;
        try {
            fis = new FileInputStream(new File("微信图片_20220917155829.jpg"));
            fos = new FileOutputStream(new File("微信图片_20220917155829secret.jpg"));
            byte buffer[] = new byte[20];
            int len;
            while ((len=fis.read(buffer))!=-1)
            {
                //对字节数组进行修改
                //错误的:并没有对buffer数组本身进行修改
    //            for(byte b:buffer)
    //            {
    //                b = (byte)(b^5);
    //            }
                //正确的
                for(int i=0;i<len;i++)
                {
                    buffer[i] = (byte)(buffer[i]^5);
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(fos!=null)
            {
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(fis!=null)
            {
                try {
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    /*
    对非文本文件图片的解密
     */
    @Test
    public void test2()
    {
        FileInputStream fis = null;
        FileOutputStream fos = null;
        try {
            fis = new FileInputStream(new File("微信图片_20220917155829secret.jpg"));
            fos = new FileOutputStream(new File("微信图片_202209171558291.jpg"));
            byte buffer[] = new byte[20];
            int len;
            while ((len=fis.read(buffer))!=-1)
            {
                //对字节数组进行修改
                //错误的:并没有对buffer数组本身进行修改
                //            for(byte b:buffer)
                //            {
                //                b = (byte)(b^5);
                //            }
                //正确的
                for(int i=0;i<len;i++)
                {
                    buffer[i] = (byte)(buffer[i]^5);
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(fos!=null)
            {
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(fis!=null)
            {
                try {
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
